查看原文
其他

手把手|教你用Python换个姿势,送狗年祝福语

2018-02-02 菜鸟分析 Python爱好者社区

作者:菜鸟分析
个人介绍:一个痴迷于Python语言的业余程序猿,未来的理想是能够与一群痴迷于Python语言的程序猿改变世界
知乎专栏: https://zhuanlan.zhihu.com/c_149865214
专栏介绍:恋习Python|因痴恋Python而起,因学习Python而聚,与大家一起疯狂练习Python代码


春节既是一个阖家团圆的节日,也是一个集中问候亲朋好友、了解近况的机会。但是也有很多人过年也不能聚在一起,所以就会会选择发短信这一方式来表达自己的祝福。其中大多人都是复制转发,让人一眼就看穿,显得自己在回复他人的时候,就觉得自己的脑子不够用了。


别怕,不要慌张,在春节来临之前,菜鸟分析的这期手把手系列,逐步带各位利用Python完成一个技术范儿十足又有点高逼格的春节祝福:用词云图定制化一个属于自己的2018年狗年祝福。

好的,一切就绪,坐稳,老司机要上路了。

一、前期准备工作

在实现代码之前,我们需要准备一些关于狗年祝福语的语料库。那究竟什么是语料库呢?语料库是我们要分析的所有文档的集合。

在日常工作中我们对文章的管理,先是一篇篇的文章不断的积累,我们存了大量的文章之后,会对文章信息进行一些归类的工作,一般体现于建立不同的文件夹来保存不同类别的文章。

同样的,我们把我们需要分析的文本文件,读取内存变量中,然后在内存变量中使用不同的数据结构,对这些文本文件进行存储,以便进行下一步的分析。这个内存变量就是语料库。

语料库构建实操

这里,菜鸟分析整理了一份网络上2018年最热门狗年祝福语语料数据,我将其存放

同时还需要在实现词云功能之前,我们需要一个python的编写和运行环境,同时安装好相关的依赖包。 对于python环境,我们推荐使用ipython notebook。 在本地电脑环境,anaconda提供了非常便利的安装和部署,他会自动帮你把ipython notebook环境部署好。

词云功能所需的依赖包如下: jieba(分词包)、numpy(计算包)、 codecs(语言代码处理包)、 pandas(数据分析包)、 matplotlib(绘图功能包)、 WordCloud(词云包)。

如果在安装过程中出现问题,可以看看这篇文章:

https://zhuanlan.zhihu.com/p/33507393

一切就位,接下来,就是实操代码时刻了,就问你激不激动!?

二、代码演练

1.导入相关

#导入所需要的包 import jieba import numpy as np import codecs import pandas import matplotlib.pyplot as plt from scipy.misc import imread from wordcloud import WordCloud,ImageColorGenerator

  2.导入相关记录txt文件,分词

所谓分词即是将文本序列按完整的意思切分成一个一个的词儿,方便进行下一步的分析(词频统计,情感分析等)。

由于英文词与词自带空格作为分隔符,相比于中文分词要简单的多。我们在做中文分词时,需要把词语从一整段话中筛出来,困难之处在于,汉语表达博大精深,一段话往往有不同的切分方法。

所幸这不是我们需要担心的,Python中的Jieba库提供了现成的解决方案。

#分词 file=codecs.open(u"2018.txt",'r',encoding='UTF-8') content=file.read() file.close() segment=[] #jiaba调用了自己的分词算法,将切分好的文本按逗号分隔符分开 segs=jieba.cut(content) for seg in segs:    if len(seg)>1 and seg!='\r\n':        segment.append(seg)

3.统计词频:狗年祝福日常高频词

下面进入到词云的关键一步了:词频统计。我们需要统计有效词集中每个词的出现次数,统计使用groupby函数。

#统计分词结果 words_df=pandas.DataFrame({'segment':segment})#组建数据框pandas.DataFrame words_df.head() words_stat=words_df.groupby(by=['segment'])['segment'].agg({"计数":numpy.size}) words_stat=words_stat.reset_index() words_stat

我们已经把语料库搭建好,对语料库进行了分词,上面的案例我们得到了一列为分词(segment),一列为分词所属文件(filePath)的数据框,接下来我们进行词频统计就非常简单了。

我们使用分组统计函数,直接在分词变量数据框后调用groupby方法,使用分词字段进行分组,然后聚合函数使用numpy.size函数,也就是对分组字段做一个计数,最后重新设定索引[‘segment’],在根据计算进行倒序排列,得到的结果就是我们词频统计的结果了。

这里要特别注意的是:降序计数调用的方法sort函数,需要新版本的pandas库,懒得升新版本不降序也不影响后续的处理,这里小伙伴们可以自己处理。

4.做词云,开启狗年汪汪汪模式

最后是词云的点睛之笔了:数据图形化显示。有了强有力的工具包,这些工作都是分分钟就可以搞定。我们使用matplotlib和wordcloud工具来图形化显示上述的词频统计结果

%matplotlib #生成一个matplot对象,传入一个字体位置的路径和背景颜色即可 wordcloud=WordCloud(font_path="C:\simhei.ttf",background_color="white",max_words=200) #WordCloud方法接受一个字典结构的输入,我们前面整理出来的词频统计结果是数据框的形式,因此需要转换,转换的方法, #首先把分词设置为数据框的索引,然后在调用一个to_dict()的方法,就可以转换为字典的机构 words=words_stat.set_index('segment').to_dict() #接着调用fit_words方法来调用我们的词频 wordcloud.fit_words(words['计数']) #绘图 plt.imshow(wordcloud) plt.show()

词云结果图

5.自定义背景图做词云,让他看到你是真心祝福

我们当然还可以把图形呈现玩得再酷炫一些,自定义一个心形图像背景并将词云图形化输出。

心形云词祝福

当然你也可以选择对你们更有意义的图片,生成自己独一无二的词云图,我自己在网上找了一对萌狗狗(如自己的照片,自家的狗狗等)如果你想将生成的图形以本地图片的形式生成并打开显示,可以使用下面的实现代码:

%matplotlib cloud_mask=imread(r'C:\gou.png') wordcloud=WordCloud(background_color="white",mask=cloud_mask,font_path="C:\simhei.ttf") words=words_stat.set_index('segment').to_dict() wordcloud.fit_words(words['计数']) plt.imshow(wordcloud) plt.show()

萌狗词云祝福

以上,就是2018年狗年春节祝福语词云的实现过程,所有代码都经过调试,直接可用。 让喜欢数据的你,利用这种方式,为心爱的他/她,带来一份数据感、科技感、炫酷感、新奇感十足的春节祝福吧!

再次菜鸟分析也祝福大家旺旺狗年,幸福吉祥!觉得不错话,顺手点个赞,转发一下哦!

赞赏作者

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

小编的Python入门视频课程!!!

崔老师爬虫实战案例免费学习视频。

丘老师数据科学入门指导免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

丘老师Python网络爬虫实战免费学习视频。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存